package org.bouncycastle.jce.provider.asymmetric;

import java.util.HashMap;

import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;

public class EC {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static class Mappings extends HashMap {
        private static final long serialVersionUID = -3714935302955360800L;

        public Mappings() {
            put("KeyAgreement.ECDH",
                    "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DH");
            // BEGIN android-removed
            // put("KeyAgreement.ECDHC",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHC");
            // put("KeyAgreement.ECMQV",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQV");
            // put("KeyAgreement." +
            // X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme,
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHwithSHA1KDF");
            // put("KeyAgreement." +
            // X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme,
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQVwithSHA1KDF");
            // END android-removed

            put("KeyFactory.EC",
                    "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$EC");
            // BEGIN android-removed
            // put("KeyFactory.ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDSA");
            // put("KeyFactory.ECDH",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDH");
            // put("KeyFactory.ECDHC",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDHC");
            // put("KeyFactory.ECMQV",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECMQV");
            // END android-removed
            put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.id_ecPublicKey,
                    "EC");
            // TODO Should this be an alias for ECDH?
            put("Alg.Alias.KeyFactory."
                    + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme,
                    "EC");
            // BEGIN android-removed
            // put("Alg.Alias.KeyFactory." +
            // X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
            //
            // put("KeyFactory.ECGOST3410",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECGOST3410");
            // put("Alg.Alias.KeyFactory.GOST-3410-2001", "ECGOST3410");
            // put("Alg.Alias.KeyFactory.ECGOST-3410", "ECGOST3410");
            // put("Alg.Alias.KeyFactory." +
            // CryptoProObjectIdentifiers.gostR3410_2001, "ECGOST3410");
            // END android-removed

            put("KeyPairGenerator.EC",
                    "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$EC");
            // BEGIN android-removed
            // put("KeyPairGenerator.ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDSA");
            // put("KeyPairGenerator.ECDH",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
            // put("KeyPairGenerator.ECDHC",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDHC");
            // put("KeyPairGenerator.ECIES",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
            // put("KeyPairGenerator.ECMQV",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECMQV");
            // END android-removed
            // TODO Should this be an alias for ECDH?
            put("Alg.Alias.KeyPairGenerator."
                    + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme,
                    "EC");
            // BEGIN android-removed
            // put("Alg.Alias.KeyPairGenerator." +
            // X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
            //
            // put("KeyPairGenerator.ECGOST3410",
            // "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECGOST3410");
            // put("Alg.Alias.KeyPairGenerator.ECGOST-3410", "ECGOST3410");
            // put("Alg.Alias.KeyPairGenerator.GOST-3410-2001", "ECGOST3410");
            // END android-removed

            put("Signature.ECDSA",
                    "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA");
            put("Signature.NONEwithECDSA",
                    "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSAnone");

            put("Alg.Alias.Signature.SHA1withECDSA", "ECDSA");
            put("Alg.Alias.Signature.ECDSAwithSHA1", "ECDSA");
            put("Alg.Alias.Signature.SHA1WITHECDSA", "ECDSA");
            put("Alg.Alias.Signature.ECDSAWITHSHA1", "ECDSA");
            put("Alg.Alias.Signature.SHA1WithECDSA", "ECDSA");
            put("Alg.Alias.Signature.ECDSAWithSHA1", "ECDSA");
            put("Alg.Alias.Signature.1.2.840.10045.4.1", "ECDSA");
            // BEGIN android-removed
            // put("Alg.Alias.Signature." +
            // TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
            //
            // addSignatureAlgorithm("SHA224", "ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA224",
            // X9ObjectIdentifiers.ecdsa_with_SHA224);
            // END android-removed
            addSignatureAlgorithm(
                    "SHA256",
                    "ECDSA",
                    "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA256",
                    X9ObjectIdentifiers.ecdsa_with_SHA256);
            addSignatureAlgorithm(
                    "SHA384",
                    "ECDSA",
                    "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA384",
                    X9ObjectIdentifiers.ecdsa_with_SHA384);
            addSignatureAlgorithm(
                    "SHA512",
                    "ECDSA",
                    "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA512",
                    X9ObjectIdentifiers.ecdsa_with_SHA512);
            // BEGIN android-removed
            // addSignatureAlgorithm("RIPEMD160", "ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
            //
            // put("Signature.SHA1WITHECNR",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR");
            // put("Signature.SHA224WITHECNR",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR224");
            // put("Signature.SHA256WITHECNR",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR256");
            // put("Signature.SHA384WITHECNR",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR384");
            // put("Signature.SHA512WITHECNR",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR512");
            //
            // addSignatureAlgorithm("SHA1", "CVC-ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA",
            // EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
            // addSignatureAlgorithm("SHA224", "CVC-ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA224",
            // EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
            // addSignatureAlgorithm("SHA256", "CVC-ECDSA",
            // "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA256",
            // EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
            // END android-removed
        }

        private void addSignatureAlgorithm(String digest, String algorithm,
                String className, DERObjectIdentifier oid) {
            String mainName = digest + "WITH" + algorithm;
            String jdk11Variation1 = digest + "with" + algorithm;
            String jdk11Variation2 = digest + "With" + algorithm;
            String alias = digest + "/" + algorithm;

            put("Signature." + mainName, className);
            put("Alg.Alias.Signature." + jdk11Variation1, mainName);
            put("Alg.Alias.Signature." + jdk11Variation2, mainName);
            put("Alg.Alias.Signature." + alias, mainName);
            put("Alg.Alias.Signature." + oid, mainName);
            put("Alg.Alias.Signature.OID." + oid, mainName);
        }
    }
}
